package cn.xenosp.server.module.scheduler.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 项目名： service-web
 * 包路径： cn.xenosp.server.module.scheduler.entity
 * 作者：   TongHui
 * 创建时间: 2025-11-20 15:08
 * 描述: TODO
 * 版本: 1.0
 */
@TableName(value ="scheduled_task")
@Data
public class ScheduledTask implements Serializable {
    /**
     * 任务ID，UUID
     */
    @TableId(value = "id")
    private String id;

    /**
     * 任务名称
     */
    @TableField(value = "name")
    private String name;

    /**
     * Cron表达式
     */
    @TableField(value = "cron_expression")
    private String cronExpression;

    /**
     * 执行类全限定名
     */
    @TableField(value = "class_name")
    private String className;

    /**
     * 执行方法名
     */
    @TableField(value = "method_name")
    private String methodName;

    /**
     * 方法参数（JSON格式）
     */
    @TableField(value = "parameters")
    private String parameters;

    /**
     * 是否启用：0-禁用，1-启用
     */
    @TableField(value = "enabled")
    private Integer enabled;

    /**
     * 任务状态：RUNNING-运行中，STOPPED-已停止，ERROR-错误
     */
    @TableField(value = "status")
    private String status;

    /**
     * 最后执行时间
     */
    @TableField(value = "last_execute_time")
    private Date lastExecuteTime;

    /**
     * 任务描述
     */
    @TableField(value = "description")
    private String description;

    /**
     * 创建者
     */
    @TableField(value = "creator",fill= FieldFill.INSERT)
    private String creator;

    /**
     * 创建时间
     */
    @TableField(value = "create_time",fill= FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新者
     */
    @TableField(value = "updater",fill= FieldFill.INSERT_UPDATE)
    private String updater;

    /**
     * 更新时间
     */
    @TableField(value = "update_time",fill= FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /**
     * 是否删除
     */
    @TableField(value = "deleted")
    private Boolean deleted;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    // 构造函数、getter和setter
    public ScheduledTask() {}

    public ScheduledTask(String id, String name, String cronExpression,
                         String className, String methodName, String description) {
        this.id = id;
        this.name = name;
        this.cronExpression = cronExpression;
        this.className = className;
        this.methodName = methodName;
        this.description = description;
        this.enabled = 1;
        this.status = "STOPPED";
        this.createTime = new Date();
    }

    public boolean isStart() {
        return enabled == 1;
    }
}